package co.gov.medellin.ssti.sub.model.dao.impl;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;

import oracle.jdbc.OracleTypes;
import co.gov.medellin.ssti.sub.model.dao.IRepDetBOTDAO;
import co.gov.medellin.ssti.sub.model.dao.exception.DAOException;
import co.gov.medellin.ssti.sub.model.vo.CondicionConsultaVO;
import co.gov.medellin.ssti.sub.model.vo.RepAtributoVO;
import co.gov.medellin.ssti.sub.model.vo.RepDetBOTVO;
import co.gov.medellin.ssti.sub.model.vo.ReporteDetVO;

public class RepDetBOTDAOImpl extends BaseDAOImpl implements IRepDetBOTDAO {
	private static final String CALL_REPORTE_BENEFICIO_OTORGADO = "{call beneficios.PCS_REPORTE_BENEFICIO_OTORGADO(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}";
	private static final String CALL_REP_BENEFICIO_OTORGADOEG = "{call beneficios.PCS_REP_BENEFICIO_OTORGADOEG(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}";

	public RepDetBOTDAOImpl(Connection con) {
		super(con);
	}

	public Collection<ReporteDetVO> findReporte(
			List<RepAtributoVO> atributosGenericos,
			List<RepAtributoVO> atributosEspecificos,
			List<CondicionConsultaVO> filtros, RepDetBOTVO criteria)
			throws DAOException {
		CallableStatement cs = null;
		ResultSet rst = null;

		Collection<ReporteDetVO> beneficiarios = new LinkedList<ReporteDetVO>();
		List<RepAtributoVO> latributosEspecificos = atributosEspecificos;
		List<RepAtributoVO> latributosGenericos = atributosGenericos;
		RepAtributoVO atrVO = null;

		StringBuffer atriGenerales = new StringBuffer();
		StringBuffer atriEspecificos = new StringBuffer();
		StringBuffer codiEspecificos = new StringBuffer();
		String filtrosGenerales = "'" + checkFiltros(filtros) + "'";
		String filtrosEspecificos = null;
		if (criteria.getCodigoAtrGestor() != null
				&& criteria.getGestor() != null) {
			String checkFiltrosEspecificos;
			try {
				checkFiltrosEspecificos = "'"
						+ checkFiltrosEspecificos(filtros) + "'";
			} catch (SQLException e) {
				throw new DAOException(e);
			}
			filtrosEspecificos = "'"
					+ checkFiltrosEspecificos
					+ " AND NVL(Fcs_Ben_Valor_Atributo("
					+ criteria.getCodigoAtrGestor()
					+ ", "
					+ " bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') = TO_CHAR(''"
					+ criteria.getGestor() + "'')'";
		} else {
			try {
				filtrosEspecificos = "'" + checkFiltrosEspecificos(filtros)
						+ "'";
			} catch (SQLException e) {
				throw new DAOException(e);
			}
		}

		int sizeListAtriEsp = latributosEspecificos.size();
		String desde = criteria.getDesde();
		String hasta = criteria.getHasta();

		if (latributosGenericos.size() > 0) {
			for (int i = 0; i < latributosGenericos.size(); i++) {
				atrVO = (RepAtributoVO) latributosGenericos.get(i);
				atriGenerales.append(atrVO.getNombre() + "|");
			}
		}

		if (sizeListAtriEsp > 0) {
			for (int i = 0; i < sizeListAtriEsp; i++) {
				atrVO = (RepAtributoVO) latributosEspecificos.get(i);
				codiEspecificos.append(atrVO.getCodigo() + "|");
				atriEspecificos.append(" CAMPO" + (i + 1) + " ");
			}
		}
		try {

			// cs = conn.prepareCall(CALL_REPORTE_BENEFICIO_OTORGADO);
			/*
			 * String query =
			 * "{call beneficios.PCS_REPORTE_BENEFICIO_OTORGADO(?" + ", ?, ?," +
			 * filtrosGenerales + "," + filtrosEspecificos +
			 * ", ?, ?, ?, ?, ?)}"; cs = conn.prepareCall(query);
			 */

			String strAtriGenerales = "'" + atriGenerales.toString() + "'";
			String strCodiEspecificos = "'" + codiEspecificos.toString() + "'";
			String strAtriEspecificos = atriEspecificos.toString();

			String strSql = "{call beneficios.PCS_REPORTE_BENEFICIO_OTORGADO("
					+ strAtriGenerales + ", " + sizeListAtriEsp + ", "
					+ strCodiEspecificos + "," + "" + filtrosGenerales + ","
					+ filtrosEspecificos + ", " + criteria.getCodeSede() + ", "
					+ criteria.getCodeSubprograma() + ", '" + desde + "', '"
					+ hasta + "', ?)}";

			// System.out.println(CALL_REPORTE_BENEFICIO_OTORGADO);
			System.out.println(strSql);

			// cs.setString(1, strAtriGenerales);
			// cs.setInt(2, sizeListAtriEsp);
			// cs.setString(3, strCodiEspecificos);
			// cs.setString(2, filtrosGenerales);
			// cs.setString(3, filtrosEspecificos);
			// cs.setLong(4, criteria.getCodeSede().longValue());
			// cs.setLong(5, criteria.getCodeSubprograma().longValue());
			// cs.setString(6, desde);
			// cs.setString(7, hasta);
			// cs.registerOutParameter(8, OracleTypes.CURSOR);
			// cs.execute();
			cs = conn.prepareCall(strSql);
			cs.registerOutParameter(1, OracleTypes.CURSOR);
			cs.execute();

			rst = (ResultSet) cs.getObject(1);
			ReporteDetVO reporteDetVO = null;

			while (rst.next()) {
				reporteDetVO = new ReporteDetVO();
				if (strAtriGenerales != null) {
					if (strAtriGenerales.indexOf("TIPO_DOCUMENTO") != -1) {
						reporteDetVO.setTipoDocumento(rst
								.getString("TIPO_DOCUMENTO"));
					}
					if (strAtriGenerales.indexOf("NUMERO_DOCUMENTO") != -1) {
						reporteDetVO.setNumeroDocumento(rst
								.getString("NUMERO_DOCUMENTO"));
					}
					if (strAtriGenerales.indexOf("PRIMER_NOMBRE") != -1) {
						reporteDetVO.setPrimerNombre(rst
								.getString("PRIMER_NOMBRE"));
					}
					if (strAtriGenerales.indexOf("SEGUNDO_NOMBRE") != -1) {
						reporteDetVO.setSegundoNombre(rst
								.getString("SEGUNDO_NOMBRE"));
					}
					if (strAtriGenerales.indexOf("PRIMER_APELLIDO") != -1) {
						reporteDetVO.setPrimerApellido(rst
								.getString("PRIMER_APELLIDO"));
					}
					if (strAtriGenerales.indexOf("SEGUNDO_APELLIDO") != -1) {
						reporteDetVO.setSegundoApellido(rst
								.getString("SEGUNDO_APELLIDO"));
					}
					if (strAtriGenerales.indexOf("DIRECCION_DESCRIPTIVA") != -1) {
						reporteDetVO.setDirDescriptiva(rst
								.getString("DIRECCION_DESCRIPTIVA"));
					}
					if (strAtriGenerales.indexOf("DIRECCION_ENCASILLADA") != -1) {
						reporteDetVO.setDirEncasillada(rst
								.getString("DIRECCION_ENCASILLADA"));
					}
					if (strAtriGenerales.indexOf("SEXO") != -1) {
						reporteDetVO.setSexo(rst.getString("SEXO"));
					}
					if (strAtriGenerales.indexOf("FECHA_NACIMIENTO") != -1) {
						reporteDetVO.setFechaNacimiento(rst
								.getString("FECHA_NACIMIENTO"));
					}
					if (strAtriGenerales.indexOf("VFL_CODIGO_COMUNA") != -1) {
						reporteDetVO.setComunaCorregimiento(rst
								.getString("VFL_CODIGO_COMUNA"));
					}
					if (strAtriGenerales.indexOf("VFL_CODIGO_ZONA") != -1) {
						reporteDetVO.setZona(rst.getString("VFL_CODIGO_ZONA"));
					}
					if (strAtriGenerales.indexOf("LOCALIZACION_COBAMA") != -1) {
						reporteDetVO.setLocalizacion(rst
								.getString("LOCALIZACION_COBAMA"));
					}
					if (strAtriGenerales.indexOf("VFL_CODIGO_BARRIO") != -1) {
						reporteDetVO.setBarrioVereda(rst
								.getString("VFL_CODIGO_BARRIO"));
					}
					if (strAtriGenerales.indexOf("TELEFONO") != -1) {
						reporteDetVO.setTelefono(rst.getString("TELEFONO"));
					}
					if (strAtriGenerales.indexOf("ETNIA") != -1) {
						reporteDetVO.setEtnia(rst.getString("ETNIA"));
					}
					if (strAtriGenerales.indexOf("CORREO_ELECTRONICO") != -1) {
						reporteDetVO.setCorreElectronico(rst
								.getString("CORREO_ELECTRONICO"));
					}
					if (strAtriGenerales.indexOf("FICHA_SISBEN") != -1) {
						reporteDetVO.setFichaSisben(rst
								.getString("FICHA_SISBEN"));
					}
					if (strAtriGenerales.indexOf("HOGAR_SISBEN") != -1) {
						reporteDetVO.setHogarSisben(rst
								.getString("HOGAR_SISBEN"));
					}
					if (strAtriGenerales.indexOf("ORDEN_SISBEN") != -1) {
						reporteDetVO.setOrdenSisben(rst
								.getString("ORDEN_SISBEN"));
					}
					if (strAtriGenerales.indexOf("NIVEL_SISBEN") != -1) {
						reporteDetVO.setNivelSisben(rst
								.getString("NIVEL_SISBEN"));
					}
					if (strAtriGenerales.indexOf("PUNTAJE_SISBEN") != -1) {
						reporteDetVO.setPuntajeSisben(rst
								.getString("PUNTAJE_SISBEN"));
					}
					if (strAtriGenerales.indexOf("FE_ENCUESTA_SISBEN") != -1) {
						reporteDetVO.setFechaEncuesta(rst
								.getString("FE_ENCUESTA_SISBEN"));
					}
					if (strAtriGenerales.indexOf("DISCAPACIDAD_SISBEN") != -1) {
						reporteDetVO.setDiscapacidad(rst
								.getString("DISCAPACIDAD_SISBEN"));
					}
					if (strAtriGenerales.indexOf("EDAD") != -1) {
						reporteDetVO.setEdad(rst.getString("EDAD"));
					}
				}
				if (strCodiEspecificos != null) {
					/*
					 * La division en condicionales teniendo en cuenta el tamano
					 * de la lista de atributos especificos se hace con el
					 * objetivo de minimizar el numero de comparaciones
					 */
					if (sizeListAtriEsp <= 50 || sizeListAtriEsp >= 50) {
						if (strAtriEspecificos.indexOf("CAMPO1") != -1) {
							reporteDetVO.setCampo1(rst.getString("CAMPO1"));
						}
						if (strAtriEspecificos.indexOf("CAMPO2") != -1) {
							reporteDetVO.setCampo2(rst.getString("CAMPO2"));
						}
						if (strAtriEspecificos.indexOf("CAMPO3") != -1) {
							reporteDetVO.setCampo3(rst.getString("CAMPO3"));
						}
						if (strAtriEspecificos.indexOf("CAMPO4") != -1) {
							reporteDetVO.setCampo4(rst.getString("CAMPO4"));
						}
						if (strAtriEspecificos.indexOf("CAMPO5") != -1) {
							reporteDetVO.setCampo5(rst.getString("CAMPO5"));
						}
						if (strAtriEspecificos.indexOf("CAMPO6") != -1) {
							reporteDetVO.setCampo6(rst.getString("CAMPO6"));
						}
						if (strAtriEspecificos.indexOf("CAMPO7") != -1) {
							reporteDetVO.setCampo7(rst.getString("CAMPO7"));
						}
						if (strAtriEspecificos.indexOf("CAMPO8") != -1) {
							reporteDetVO.setCampo8(rst.getString("CAMPO8"));
						}
						if (strAtriEspecificos.indexOf("CAMPO9") != -1) {
							reporteDetVO.setCampo9(rst.getString("CAMPO9"));
						}
						if (strAtriEspecificos.indexOf("CAMPO10") != -1) {
							reporteDetVO.setCampo10(rst.getString("CAMPO10"));
						}

						if (sizeListAtriEsp > 10) {
							if (strAtriEspecificos.indexOf("CAMPO11") != -1) {
								reporteDetVO.setCampo11(rst
										.getString("CAMPO11"));
							}
							if (strAtriEspecificos.indexOf("CAMPO12") != -1) {
								reporteDetVO.setCampo12(rst
										.getString("CAMPO12"));
							}
							if (strAtriEspecificos.indexOf("CAMPO13") != -1) {
								reporteDetVO.setCampo13(rst
										.getString("CAMPO13"));
							}
							if (strAtriEspecificos.indexOf("CAMPO14") != -1) {
								reporteDetVO.setCampo14(rst
										.getString("CAMPO14"));
							}
							if (strAtriEspecificos.indexOf("CAMPO15") != -1) {
								reporteDetVO.setCampo15(rst
										.getString("CAMPO15"));
							}
							if (strAtriEspecificos.indexOf("CAMPO16") != -1) {
								reporteDetVO.setCampo16(rst
										.getString("CAMPO16"));
							}
							if (strAtriEspecificos.indexOf("CAMPO17") != -1) {
								reporteDetVO.setCampo17(rst
										.getString("CAMPO17"));
							}
							if (strAtriEspecificos.indexOf("CAMPO18") != -1) {
								reporteDetVO.setCampo18(rst
										.getString("CAMPO18"));
							}
							if (strAtriEspecificos.indexOf("CAMPO19") != -1) {
								reporteDetVO.setCampo19(rst
										.getString("CAMPO19"));
							}
							if (strAtriEspecificos.indexOf("CAMPO20") != -1) {
								reporteDetVO.setCampo20(rst
										.getString("CAMPO20"));
							}
						}
						if (sizeListAtriEsp > 20) {
							if (strAtriEspecificos.indexOf("CAMPO21") != -1) {
								reporteDetVO.setCampo21(rst
										.getString("CAMPO21"));
							}
							if (strAtriEspecificos.indexOf("CAMPO22") != -1) {
								reporteDetVO.setCampo22(rst
										.getString("CAMPO22"));
							}
							if (strAtriEspecificos.indexOf("CAMPO23") != -1) {
								reporteDetVO.setCampo23(rst
										.getString("CAMPO23"));
							}
							if (strAtriEspecificos.indexOf("CAMPO24") != -1) {
								reporteDetVO.setCampo24(rst
										.getString("CAMPO24"));
							}
							if (strAtriEspecificos.indexOf("CAMPO25") != -1) {
								reporteDetVO.setCampo25(rst
										.getString("CAMPO25"));
							}
							if (strAtriEspecificos.indexOf("CAMPO26") != -1) {
								reporteDetVO.setCampo26(rst
										.getString("CAMPO26"));
							}
							if (strAtriEspecificos.indexOf("CAMPO27") != -1) {
								reporteDetVO.setCampo27(rst
										.getString("CAMPO27"));
							}
							if (strAtriEspecificos.indexOf("CAMPO28") != -1) {
								reporteDetVO.setCampo28(rst
										.getString("CAMPO28"));
							}
							if (strAtriEspecificos.indexOf("CAMPO29") != -1) {
								reporteDetVO.setCampo29(rst
										.getString("CAMPO29"));
							}
							if (strAtriEspecificos.indexOf("CAMPO30") != -1) {
								reporteDetVO.setCampo30(rst
										.getString("CAMPO30"));
							}
						}
						if (sizeListAtriEsp > 30) {
							if (strAtriEspecificos.indexOf("CAMPO31") != -1) {
								reporteDetVO.setCampo31(rst
										.getString("CAMPO31"));
							}
							if (strAtriEspecificos.indexOf("CAMPO32") != -1) {
								reporteDetVO.setCampo32(rst
										.getString("CAMPO32"));
							}
							if (strAtriEspecificos.indexOf("CAMPO33") != -1) {
								reporteDetVO.setCampo33(rst
										.getString("CAMPO33"));
							}
							if (strAtriEspecificos.indexOf("CAMPO34") != -1) {
								reporteDetVO.setCampo34(rst
										.getString("CAMPO34"));
							}
							if (strAtriEspecificos.indexOf("CAMPO35") != -1) {
								reporteDetVO.setCampo35(rst
										.getString("CAMPO35"));
							}
							if (strAtriEspecificos.indexOf("CAMPO36") != -1) {
								reporteDetVO.setCampo36(rst
										.getString("CAMPO36"));
							}
							if (strAtriEspecificos.indexOf("CAMPO37") != -1) {
								reporteDetVO.setCampo37(rst
										.getString("CAMPO37"));
							}
							if (strAtriEspecificos.indexOf("CAMPO38") != -1) {
								reporteDetVO.setCampo38(rst
										.getString("CAMPO38"));
							}
							if (strAtriEspecificos.indexOf("CAMPO39") != -1) {
								reporteDetVO.setCampo39(rst
										.getString("CAMPO39"));
							}
							if (strAtriEspecificos.indexOf("CAMPO40") != -1) {
								reporteDetVO.setCampo40(rst
										.getString("CAMPO40"));
							}
						}
						if (sizeListAtriEsp > 40) {
							if (strAtriEspecificos.indexOf("CAMPO41") != -1) {
								reporteDetVO.setCampo41(rst
										.getString("CAMPO41"));
							}
							if (strAtriEspecificos.indexOf("CAMPO42") != -1) {
								reporteDetVO.setCampo42(rst
										.getString("CAMPO42"));
							}
							if (strAtriEspecificos.indexOf("CAMPO43") != -1) {
								reporteDetVO.setCampo43(rst
										.getString("CAMPO43"));
							}
							if (strAtriEspecificos.indexOf("CAMPO44") != -1) {
								reporteDetVO.setCampo44(rst
										.getString("CAMPO44"));
							}
							if (strAtriEspecificos.indexOf("CAMPO45") != -1) {
								reporteDetVO.setCampo45(rst
										.getString("CAMPO45"));
							}
							if (strAtriEspecificos.indexOf("CAMPO46") != -1) {
								reporteDetVO.setCampo46(rst
										.getString("CAMPO46"));
							}
							if (strAtriEspecificos.indexOf("CAMPO47") != -1) {
								reporteDetVO.setCampo47(rst
										.getString("CAMPO47"));
							}
							if (strAtriEspecificos.indexOf("CAMPO48") != -1) {
								reporteDetVO.setCampo48(rst
										.getString("CAMPO48"));
							}
							if (strAtriEspecificos.indexOf("CAMPO49") != -1) {
								reporteDetVO.setCampo49(rst
										.getString("CAMPO49"));
							}
							if (strAtriEspecificos.indexOf("CAMPO50") != -1) {
								reporteDetVO.setCampo50(rst
										.getString("CAMPO50"));
							}
						}
					}
					if (sizeListAtriEsp > 50) {
						if (strAtriEspecificos.indexOf("CAMPO51") != -1) {
							reporteDetVO.setCampo51(rst.getString("CAMPO51"));
						}
						if (strAtriEspecificos.indexOf("CAMPO52") != -1) {
							reporteDetVO.setCampo52(rst.getString("CAMPO52"));
						}
						if (strAtriEspecificos.indexOf("CAMPO53") != -1) {
							reporteDetVO.setCampo53(rst.getString("CAMPO53"));
						}
						if (strAtriEspecificos.indexOf("CAMPO54") != -1) {
							reporteDetVO.setCampo54(rst.getString("CAMPO54"));
						}
						if (strAtriEspecificos.indexOf("CAMPO55") != -1) {
							reporteDetVO.setCampo55(rst.getString("CAMPO55"));
						}
						if (strAtriEspecificos.indexOf("CAMPO56") != -1) {
							reporteDetVO.setCampo56(rst.getString("CAMPO56"));
						}
						if (strAtriEspecificos.indexOf("CAMPO57") != -1) {
							reporteDetVO.setCampo57(rst.getString("CAMPO57"));
						}
						if (strAtriEspecificos.indexOf("CAMPO58") != -1) {
							reporteDetVO.setCampo58(rst.getString("CAMPO58"));
						}
						if (strAtriEspecificos.indexOf("CAMPO59") != -1) {
							reporteDetVO.setCampo59(rst.getString("CAMPO59"));
						}
						if (strAtriEspecificos.indexOf("CAMPO60") != -1) {
							reporteDetVO.setCampo60(rst.getString("CAMPO60"));
						}

						if (sizeListAtriEsp > 60) {
							if (strAtriEspecificos.indexOf("CAMPO61") != -1) {
								reporteDetVO.setCampo61(rst
										.getString("CAMPO61"));
							}
							if (strAtriEspecificos.indexOf("CAMPO62") != -1) {
								reporteDetVO.setCampo62(rst
										.getString("CAMPO62"));
							}
							if (strAtriEspecificos.indexOf("CAMPO63") != -1) {
								reporteDetVO.setCampo63(rst
										.getString("CAMPO63"));
							}
							if (strAtriEspecificos.indexOf("CAMPO64") != -1) {
								reporteDetVO.setCampo64(rst
										.getString("CAMPO64"));
							}
							if (strAtriEspecificos.indexOf("CAMPO65") != -1) {
								reporteDetVO.setCampo65(rst
										.getString("CAMPO65"));
							}
							if (strAtriEspecificos.indexOf("CAMPO66") != -1) {
								reporteDetVO.setCampo66(rst
										.getString("CAMPO66"));
							}
							if (strAtriEspecificos.indexOf("CAMPO67") != -1) {
								reporteDetVO.setCampo67(rst
										.getString("CAMPO67"));
							}
							if (strAtriEspecificos.indexOf("CAMPO68") != -1) {
								reporteDetVO.setCampo68(rst
										.getString("CAMPO68"));
							}
							if (strAtriEspecificos.indexOf("CAMPO69") != -1) {
								reporteDetVO.setCampo69(rst
										.getString("CAMPO69"));
							}
							if (strAtriEspecificos.indexOf("CAMPO70") != -1) {
								reporteDetVO.setCampo70(rst
										.getString("CAMPO70"));
							}
						}
						if (sizeListAtriEsp > 70) {
							if (strAtriEspecificos.indexOf("CAMPO71") != -1) {
								reporteDetVO.setCampo71(rst
										.getString("CAMPO71"));
							}
							if (strAtriEspecificos.indexOf("CAMPO72") != -1) {
								reporteDetVO.setCampo72(rst
										.getString("CAMPO72"));
							}
							if (strAtriEspecificos.indexOf("CAMPO73") != -1) {
								reporteDetVO.setCampo73(rst
										.getString("CAMPO73"));
							}
							if (strAtriEspecificos.indexOf("CAMPO74") != -1) {
								reporteDetVO.setCampo74(rst
										.getString("CAMPO74"));
							}
							if (strAtriEspecificos.indexOf("CAMPO75") != -1) {
								reporteDetVO.setCampo75(rst
										.getString("CAMPO75"));
							}
							if (strAtriEspecificos.indexOf("CAMPO76") != -1) {
								reporteDetVO.setCampo76(rst
										.getString("CAMPO76"));
							}
							if (strAtriEspecificos.indexOf("CAMPO77") != -1) {
								reporteDetVO.setCampo77(rst
										.getString("CAMPO77"));
							}
							if (strAtriEspecificos.indexOf("CAMPO78") != -1) {
								reporteDetVO.setCampo78(rst
										.getString("CAMPO78"));
							}
							if (strAtriEspecificos.indexOf("CAMPO79") != -1) {
								reporteDetVO.setCampo79(rst
										.getString("CAMPO79"));
							}
							if (strAtriEspecificos.indexOf("CAMPO80") != -1) {
								reporteDetVO.setCampo80(rst
										.getString("CAMPO80"));
							}
						}
						if (sizeListAtriEsp > 80) {
							if (strAtriEspecificos.indexOf("CAMPO81") != -1) {
								reporteDetVO.setCampo81(rst
										.getString("CAMPO81"));
							}
							if (strAtriEspecificos.indexOf("CAMPO82") != -1) {
								reporteDetVO.setCampo82(rst
										.getString("CAMPO82"));
							}
							if (strAtriEspecificos.indexOf("CAMPO83") != -1) {
								reporteDetVO.setCampo83(rst
										.getString("CAMPO83"));
							}
							if (strAtriEspecificos.indexOf("CAMPO84") != -1) {
								reporteDetVO.setCampo84(rst
										.getString("CAMPO84"));
							}
							if (strAtriEspecificos.indexOf("CAMPO85") != -1) {
								reporteDetVO.setCampo85(rst
										.getString("CAMPO85"));
							}
							if (strAtriEspecificos.indexOf("CAMPO86") != -1) {
								reporteDetVO.setCampo86(rst
										.getString("CAMPO86"));
							}
							if (strAtriEspecificos.indexOf("CAMPO87") != -1) {
								reporteDetVO.setCampo87(rst
										.getString("CAMPO87"));
							}
							if (strAtriEspecificos.indexOf("CAMPO88") != -1) {
								reporteDetVO.setCampo88(rst
										.getString("CAMPO88"));
							}
							if (strAtriEspecificos.indexOf("CAMPO89") != -1) {
								reporteDetVO.setCampo89(rst
										.getString("CAMPO89"));
							}
							if (strAtriEspecificos.indexOf("CAMPO90") != -1) {
								reporteDetVO.setCampo90(rst
										.getString("CAMPO90"));
							}
						}
						if (sizeListAtriEsp > 90) {
							if (strAtriEspecificos.indexOf("CAMPO91") != -1) {
								reporteDetVO.setCampo91(rst
										.getString("CAMPO91"));
							}
							if (strAtriEspecificos.indexOf("CAMPO92") != -1) {
								reporteDetVO.setCampo92(rst
										.getString("CAMPO92"));
							}
							if (strAtriEspecificos.indexOf("CAMPO93") != -1) {
								reporteDetVO.setCampo93(rst
										.getString("CAMPO93"));
							}
							if (strAtriEspecificos.indexOf("CAMPO94") != -1) {
								reporteDetVO.setCampo94(rst
										.getString("CAMPO94"));
							}
							if (strAtriEspecificos.indexOf("CAMPO95") != -1) {
								reporteDetVO.setCampo95(rst
										.getString("CAMPO95"));
							}
							if (strAtriEspecificos.indexOf("CAMPO96") != -1) {
								reporteDetVO.setCampo96(rst
										.getString("CAMPO96"));
							}
							if (strAtriEspecificos.indexOf("CAMPO97") != -1) {
								reporteDetVO.setCampo97(rst
										.getString("CAMPO97"));
							}
							if (strAtriEspecificos.indexOf("CAMPO98") != -1) {
								reporteDetVO.setCampo98(rst
										.getString("CAMPO98"));
							}
							if (strAtriEspecificos.indexOf("CAMPO99") != -1) {
								reporteDetVO.setCampo99(rst
										.getString("CAMPO99"));
							}
							if (strAtriEspecificos.indexOf("CAMPO100") != -1) {
								reporteDetVO.setCampo100(rst
										.getString("CAMPO100"));
							}
						}
					}
				}

				reporteDetVO
						.setFechaBeneficio(rst.getString("FECHA_BENEFICIO"));
				reporteDetVO.setValor(rst.getInt("VALOR"));
				reporteDetVO.setTercero(rst.getString("TERCERO"));

				// ADICION
				// ATRIBUTOS!!!!!----------------------------------------------------------
				reporteDetVO.setTipoBeneficio(rst.getString("TIPO_BENEFICIO"));

				beneficiarios.add(reporteDetVO);
			}
		} catch (SQLException e) {
			throw new DAOException(e);
		} finally {
			close(rst, cs);
		}
		return beneficiarios;
	}

	public Collection<ReporteDetVO> findReporteConGestor(
			List<RepAtributoVO> atributosGenericos,
			List<RepAtributoVO> atributosEspecificos,
			List<CondicionConsultaVO> filtros, RepDetBOTVO criteria)
			throws DAOException {
		CallableStatement cs = null;
		ResultSet rst = null;

		Collection<ReporteDetVO> beneficiarios = new LinkedList<ReporteDetVO>();
		List<RepAtributoVO> latributosEspecificos = atributosEspecificos;
		List<RepAtributoVO> latributosGenericos = atributosGenericos;

		RepAtributoVO atrVO = null;

		StringBuffer atriGenerales = new StringBuffer();
		StringBuffer atriEspecificos = new StringBuffer();
		StringBuffer codiEspecificos = new StringBuffer();
		String filtrosGenerales = checkFiltros(filtros);
		String filtrosEspecificos = null;

		if (criteria.getCodigoAtrGestor() != null
				&& criteria.getGestor() != null) {
			String checkFiltrosEspecificos;
			try {
				checkFiltrosEspecificos = checkFiltrosEspecificos(filtros);
			} catch (SQLException e) {
				throw new DAOException(e);
			}
			// revisar prepared statement para esta parte.
			filtrosEspecificos = checkFiltrosEspecificos
					+ " AND NVL(Fcs_Ben_Valor_Atributo("
					+ criteria.getCodigoAtrGestor()
					+ ", "
					+ " bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') = TO_CHAR(''"
					+ criteria.getGestor() + "'')";
		} else {
			try {
				filtrosEspecificos = checkFiltrosEspecificos(filtros);
			} catch (SQLException e) {
				throw new DAOException(e);
			}
		}

		int sizeListAtriEsp = latributosEspecificos.size();
		String desde = criteria.getDesde();
		String hasta = criteria.getHasta();

		if (latributosGenericos.size() > 0) {
			for (int i = 0; i < latributosGenericos.size(); i++) {
				atrVO = (RepAtributoVO) latributosGenericos.get(i);
				atriGenerales.append(atrVO.getNombre() + "|");
			}
		}

		if (sizeListAtriEsp > 0) {
			for (int i = 0; i < sizeListAtriEsp; i++) {
				atrVO = (RepAtributoVO) latributosEspecificos.get(i);
				codiEspecificos.append(atrVO.getCodigo() + "|");
				atriEspecificos.append(" CAMPO" + (i + 1) + " ");
			}
		}

		try {
			String strCodiEspecificos = codiEspecificos.toString();
			String strAtriEspecificos = atriEspecificos.toString();
			String strAtriGenerales = atriGenerales.toString();

			System.out.println("strCodiEspecificos " + strCodiEspecificos);
			System.out.println("strAtriEsp " + strAtriEspecificos);
			System.out.println("strAtriGen " + strAtriGenerales);
			System.out.println("filtrosGen " + filtrosGenerales);
			System.out.println("filtrosEsp " + filtrosEspecificos);

			cs = conn.prepareCall(CALL_REP_BENEFICIO_OTORGADOEG);
			cs.setString(1, strAtriGenerales);
			cs.setInt(2, sizeListAtriEsp);
			cs.setString(3, strCodiEspecificos);
			cs.setString(4, filtrosGenerales);
			if (filtrosEspecificos != null && !filtrosEspecificos.isEmpty()) {
				cs.setString(5, filtrosEspecificos);
			} else {
				cs.setNull(5, OracleTypes.NULL);
			}
			if (criteria.getCodeSede() != null) {
				cs.setLong(6, criteria.getCodeSede().longValue());
			} else {
				cs.setNull(6, OracleTypes.NULL);
			}
			if (criteria.getCodeSubprograma() != null) {
				cs.setLong(7, criteria.getCodeSubprograma().longValue());
			} else {
				cs.setNull(7, OracleTypes.NULL);
			}
			if (desde != null && !desde.isEmpty()) {
				cs.setString(8, desde);
			} else {
				cs.setNull(8, OracleTypes.NULL);
			}
			if (hasta != null && !hasta.isEmpty()) {
				cs.setString(9, hasta);
			} else {
				cs.setNull(9, OracleTypes.NULL);
			}
			cs.registerOutParameter(10, OracleTypes.CURSOR);
			cs.execute();

			rst = (ResultSet) cs.getObject(10);

			while (rst.next()) {
				ReporteDetVO reporteDetVO = new ReporteDetVO();
				if (strAtriGenerales != null) {
					if (strAtriGenerales.indexOf("TIPO_DOCUMENTO") != -1) {
						reporteDetVO.setTipoDocumento(rst
								.getString("TIPO_DOCUMENTO"));
					}
					if (strAtriGenerales.indexOf("NUMERO_DOCUMENTO") != -1) {
						reporteDetVO.setNumeroDocumento(rst
								.getString("NUMERO_DOCUMENTO"));
					}
					if (strAtriGenerales.indexOf("PRIMER_NOMBRE") != -1) {
						reporteDetVO.setPrimerNombre(rst
								.getString("PRIMER_NOMBRE"));
					}
					if (strAtriGenerales.indexOf("SEGUNDO_NOMBRE") != -1) {
						reporteDetVO.setSegundoNombre(rst
								.getString("SEGUNDO_NOMBRE"));
					}
					if (strAtriGenerales.indexOf("PRIMER_APELLIDO") != -1) {
						reporteDetVO.setPrimerApellido(rst
								.getString("PRIMER_APELLIDO"));
					}
					if (strAtriGenerales.indexOf("SEGUNDO_APELLIDO") != -1) {
						reporteDetVO.setSegundoApellido(rst
								.getString("SEGUNDO_APELLIDO"));
					}
					if (strAtriGenerales.indexOf("DIRECCION_DESCRIPTIVA") != -1) {
						reporteDetVO.setDirDescriptiva(rst
								.getString("DIRECCION_DESCRIPTIVA"));
					}
					if (strAtriGenerales.indexOf("DIRECCION_ENCASILLADA") != -1) {
						reporteDetVO.setDirEncasillada(rst
								.getString("DIRECCION_ENCASILLADA"));
					}
					if (strAtriGenerales.indexOf("SEXO") != -1) {
						reporteDetVO.setSexo(rst.getString("SEXO"));
					}
					if (strAtriGenerales.indexOf("FECHA_NACIMIENTO") != -1) {
						reporteDetVO.setFechaNacimiento(rst
								.getString("FECHA_NACIMIENTO"));
					}
					if (strAtriGenerales.indexOf("EDAD") != -1) {
						reporteDetVO.setEdad(rst.getString("EDAD"));
					}
					if (strAtriGenerales.indexOf("VFL_CODIGO_COMUNA") != -1) {
						reporteDetVO.setComunaCorregimiento(rst
								.getString("VFL_CODIGO_COMUNA"));
					}
					if (strAtriGenerales.indexOf("VFL_CODIGO_ZONA") != -1) {
						reporteDetVO.setZona(rst.getString("VFL_CODIGO_ZONA"));
					}
					if (strAtriGenerales.indexOf("LOCALIZACION_COBAMA") != -1) {
						reporteDetVO.setLocalizacion(rst
								.getString("LOCALIZACION_COBAMA"));
					}
					if (strAtriGenerales.indexOf("VFL_CODIGO_BARRIO") != -1) {
						reporteDetVO.setBarrioVereda(rst
								.getString("VFL_CODIGO_BARRIO"));
					}
					if (strAtriGenerales.indexOf("TELEFONO") != -1) {
						reporteDetVO.setTelefono(rst.getString("TELEFONO"));
					}
					if (strAtriGenerales.indexOf("ETNIA") != -1) {
						reporteDetVO.setEtnia(rst.getString("ETNIA"));
					}
					if (strAtriGenerales.indexOf("CORREO_ELECTRONICO") != -1) {
						reporteDetVO.setCorreElectronico(rst
								.getString("CORREO_ELECTRONICO"));
					}
					if (strAtriGenerales.indexOf("FICHA_SISBEN") != -1) {
						reporteDetVO.setFichaSisben(rst
								.getString("FICHA_SISBEN"));
					}
					if (strAtriGenerales.indexOf("HOGAR_SISBEN") != -1) {
						reporteDetVO.setHogarSisben(rst
								.getString("HOGAR_SISBEN"));
					}
					if (strAtriGenerales.indexOf("ORDEN_SISBEN") != -1) {
						reporteDetVO.setOrdenSisben(rst
								.getString("ORDEN_SISBEN"));
					}
					if (strAtriGenerales.indexOf("NIVEL_SISBEN") != -1) {
						reporteDetVO.setNivelSisben(rst
								.getString("NIVEL_SISBEN"));
					}
					if (strAtriGenerales.indexOf("PUNTAJE_SISBEN") != -1) {
						reporteDetVO.setPuntajeSisben(rst
								.getString("PUNTAJE_SISBEN"));
					}
					if (strAtriGenerales.indexOf("FE_ENCUESTA_SISBEN") != -1) {
						reporteDetVO.setFechaEncuesta(rst
								.getString("FE_ENCUESTA_SISBEN"));
					}
					if (strAtriGenerales.indexOf("DISCAPACIDAD_SISBEN") != -1) {
						reporteDetVO.setDiscapacidad(rst
								.getString("DISCAPACIDAD_SISBEN"));
					}
				}
				if (codiEspecificos != null) {
					/*
					 * La division en condicionales teniendo en cuenta el
					 * tamanio de la lista de atributos especificos se hace con
					 * el objetivo de minimizar el numero de comparaciones
					 */
					if (sizeListAtriEsp <= 50 || sizeListAtriEsp >= 50) {
						if (strAtriEspecificos.indexOf("CAMPO1") != -1) {
							reporteDetVO.setCampo1(rst.getString("CAMPO1"));
						}
						if (strAtriEspecificos.indexOf("CAMPO2") != -1) {
							reporteDetVO.setCampo2(rst.getString("CAMPO2"));
						}
						if (strAtriEspecificos.indexOf("CAMPO3") != -1) {
							reporteDetVO.setCampo3(rst.getString("CAMPO3"));
						}
						if (strAtriEspecificos.indexOf("CAMPO4") != -1) {
							reporteDetVO.setCampo4(rst.getString("CAMPO4"));
						}
						if (strAtriEspecificos.indexOf("CAMPO5") != -1) {
							reporteDetVO.setCampo5(rst.getString("CAMPO5"));
						}
						if (strAtriEspecificos.indexOf("CAMPO6") != -1) {
							reporteDetVO.setCampo6(rst.getString("CAMPO6"));
						}
						if (strAtriEspecificos.indexOf("CAMPO7") != -1) {
							reporteDetVO.setCampo7(rst.getString("CAMPO7"));
						}
						if (strAtriEspecificos.indexOf("CAMPO8") != -1) {
							reporteDetVO.setCampo8(rst.getString("CAMPO8"));
						}
						if (strAtriEspecificos.indexOf("CAMPO9") != -1) {
							reporteDetVO.setCampo9(rst.getString("CAMPO9"));
						}
						if (strAtriEspecificos.indexOf("CAMPO10") != -1) {
							reporteDetVO.setCampo10(rst.getString("CAMPO10"));
						}

						if (sizeListAtriEsp > 10) {
							if (strAtriEspecificos.indexOf("CAMPO11") != -1) {
								reporteDetVO.setCampo11(rst
										.getString("CAMPO11"));
							}
							if (strAtriEspecificos.indexOf("CAMPO12") != -1) {
								reporteDetVO.setCampo12(rst
										.getString("CAMPO12"));
							}
							if (strAtriEspecificos.indexOf("CAMPO13") != -1) {
								reporteDetVO.setCampo13(rst
										.getString("CAMPO13"));
							}
							if (strAtriEspecificos.indexOf("CAMPO14") != -1) {
								reporteDetVO.setCampo14(rst
										.getString("CAMPO14"));
							}
							if (strAtriEspecificos.indexOf("CAMPO15") != -1) {
								reporteDetVO.setCampo15(rst
										.getString("CAMPO15"));
							}
							if (strAtriEspecificos.indexOf("CAMPO16") != -1) {
								reporteDetVO.setCampo16(rst
										.getString("CAMPO16"));
							}
							if (strAtriEspecificos.indexOf("CAMPO17") != -1) {
								reporteDetVO.setCampo17(rst
										.getString("CAMPO17"));
							}
							if (strAtriEspecificos.indexOf("CAMPO18") != -1) {
								reporteDetVO.setCampo18(rst
										.getString("CAMPO18"));
							}
							if (strAtriEspecificos.indexOf("CAMPO19") != -1) {
								reporteDetVO.setCampo19(rst
										.getString("CAMPO19"));
							}
							if (strAtriEspecificos.indexOf("CAMPO20") != -1) {
								reporteDetVO.setCampo20(rst
										.getString("CAMPO20"));
							}
						}
						if (sizeListAtriEsp > 20) {
							if (strAtriEspecificos.indexOf("CAMPO21") != -1) {
								reporteDetVO.setCampo21(rst
										.getString("CAMPO21"));
							}
							if (strAtriEspecificos.indexOf("CAMPO22") != -1) {
								reporteDetVO.setCampo22(rst
										.getString("CAMPO22"));
							}
							if (strAtriEspecificos.indexOf("CAMPO23") != -1) {
								reporteDetVO.setCampo23(rst
										.getString("CAMPO23"));
							}
							if (strAtriEspecificos.indexOf("CAMPO24") != -1) {
								reporteDetVO.setCampo24(rst
										.getString("CAMPO24"));
							}
							if (strAtriEspecificos.indexOf("CAMPO25") != -1) {
								reporteDetVO.setCampo25(rst
										.getString("CAMPO25"));
							}
							if (strAtriEspecificos.indexOf("CAMPO26") != -1) {
								reporteDetVO.setCampo26(rst
										.getString("CAMPO26"));
							}
							if (strAtriEspecificos.indexOf("CAMPO27") != -1) {
								reporteDetVO.setCampo27(rst
										.getString("CAMPO27"));
							}
							if (strAtriEspecificos.indexOf("CAMPO28") != -1) {
								reporteDetVO.setCampo28(rst
										.getString("CAMPO28"));
							}
							if (strAtriEspecificos.indexOf("CAMPO29") != -1) {
								reporteDetVO.setCampo29(rst
										.getString("CAMPO29"));
							}
							if (strAtriEspecificos.indexOf("CAMPO30") != -1) {
								reporteDetVO.setCampo30(rst
										.getString("CAMPO30"));
							}
						}
						if (sizeListAtriEsp > 30) {
							if (strAtriEspecificos.indexOf("CAMPO31") != -1) {
								reporteDetVO.setCampo31(rst
										.getString("CAMPO31"));
							}
							if (strAtriEspecificos.indexOf("CAMPO32") != -1) {
								reporteDetVO.setCampo32(rst
										.getString("CAMPO32"));
							}
							if (strAtriEspecificos.indexOf("CAMPO33") != -1) {
								reporteDetVO.setCampo33(rst
										.getString("CAMPO33"));
							}
							if (strAtriEspecificos.indexOf("CAMPO34") != -1) {
								reporteDetVO.setCampo34(rst
										.getString("CAMPO34"));
							}
							if (strAtriEspecificos.indexOf("CAMPO35") != -1) {
								reporteDetVO.setCampo35(rst
										.getString("CAMPO35"));
							}
							if (strAtriEspecificos.indexOf("CAMPO36") != -1) {
								reporteDetVO.setCampo36(rst
										.getString("CAMPO36"));
							}
							if (strAtriEspecificos.indexOf("CAMPO37") != -1) {
								reporteDetVO.setCampo37(rst
										.getString("CAMPO37"));
							}
							if (strAtriEspecificos.indexOf("CAMPO38") != -1) {
								reporteDetVO.setCampo38(rst
										.getString("CAMPO38"));
							}
							if (strAtriEspecificos.indexOf("CAMPO39") != -1) {
								reporteDetVO.setCampo39(rst
										.getString("CAMPO39"));
							}
							if (strAtriEspecificos.indexOf("CAMPO40") != -1) {
								reporteDetVO.setCampo40(rst
										.getString("CAMPO40"));
							}
						}
						if (sizeListAtriEsp > 40) {
							if (strAtriEspecificos.indexOf("CAMPO41") != -1) {
								reporteDetVO.setCampo41(rst
										.getString("CAMPO41"));
							}
							if (strAtriEspecificos.indexOf("CAMPO42") != -1) {
								reporteDetVO.setCampo42(rst
										.getString("CAMPO42"));
							}
							if (strAtriEspecificos.indexOf("CAMPO43") != -1) {
								reporteDetVO.setCampo43(rst
										.getString("CAMPO43"));
							}
							if (strAtriEspecificos.indexOf("CAMPO44") != -1) {
								reporteDetVO.setCampo44(rst
										.getString("CAMPO44"));
							}
							if (strAtriEspecificos.indexOf("CAMPO45") != -1) {
								reporteDetVO.setCampo45(rst
										.getString("CAMPO45"));
							}
							if (strAtriEspecificos.indexOf("CAMPO46") != -1) {
								reporteDetVO.setCampo46(rst
										.getString("CAMPO46"));
							}
							if (strAtriEspecificos.indexOf("CAMPO47") != -1) {
								reporteDetVO.setCampo47(rst
										.getString("CAMPO47"));
							}
							if (strAtriEspecificos.indexOf("CAMPO48") != -1) {
								reporteDetVO.setCampo48(rst
										.getString("CAMPO48"));
							}
							if (strAtriEspecificos.indexOf("CAMPO49") != -1) {
								reporteDetVO.setCampo49(rst
										.getString("CAMPO49"));
							}
							if (strAtriEspecificos.indexOf("CAMPO50") != -1) {
								reporteDetVO.setCampo50(rst
										.getString("CAMPO50"));
							}
						}
					}
					if (sizeListAtriEsp > 50) {
						if (strAtriEspecificos.indexOf("CAMPO51") != -1) {
							reporteDetVO.setCampo51(rst.getString("CAMPO51"));
						}
						if (strAtriEspecificos.indexOf("CAMPO52") != -1) {
							reporteDetVO.setCampo52(rst.getString("CAMPO52"));
						}
						if (strAtriEspecificos.indexOf("CAMPO53") != -1) {
							reporteDetVO.setCampo53(rst.getString("CAMPO53"));
						}
						if (strAtriEspecificos.indexOf("CAMPO54") != -1) {
							reporteDetVO.setCampo54(rst.getString("CAMPO54"));
						}
						if (strAtriEspecificos.indexOf("CAMPO55") != -1) {
							reporteDetVO.setCampo55(rst.getString("CAMPO55"));
						}
						if (strAtriEspecificos.indexOf("CAMPO56") != -1) {
							reporteDetVO.setCampo56(rst.getString("CAMPO56"));
						}
						if (strAtriEspecificos.indexOf("CAMPO57") != -1) {
							reporteDetVO.setCampo57(rst.getString("CAMPO57"));
						}
						if (strAtriEspecificos.indexOf("CAMPO58") != -1) {
							reporteDetVO.setCampo58(rst.getString("CAMPO58"));
						}
						if (strAtriEspecificos.indexOf("CAMPO59") != -1) {
							reporteDetVO.setCampo59(rst.getString("CAMPO59"));
						}
						if (strAtriEspecificos.indexOf("CAMPO60") != -1) {
							reporteDetVO.setCampo60(rst.getString("CAMPO60"));
						}

						if (sizeListAtriEsp > 60) {
							if (strAtriEspecificos.indexOf("CAMPO61") != -1) {
								reporteDetVO.setCampo61(rst
										.getString("CAMPO61"));
							}
							if (strAtriEspecificos.indexOf("CAMPO62") != -1) {
								reporteDetVO.setCampo62(rst
										.getString("CAMPO62"));
							}
							if (strAtriEspecificos.indexOf("CAMPO63") != -1) {
								reporteDetVO.setCampo63(rst
										.getString("CAMPO63"));
							}
							if (strAtriEspecificos.indexOf("CAMPO64") != -1) {
								reporteDetVO.setCampo64(rst
										.getString("CAMPO64"));
							}
							if (strAtriEspecificos.indexOf("CAMPO65") != -1) {
								reporteDetVO.setCampo65(rst
										.getString("CAMPO65"));
							}
							if (strAtriEspecificos.indexOf("CAMPO66") != -1) {
								reporteDetVO.setCampo66(rst
										.getString("CAMPO66"));
							}
							if (strAtriEspecificos.indexOf("CAMPO67") != -1) {
								reporteDetVO.setCampo67(rst
										.getString("CAMPO67"));
							}
							if (strAtriEspecificos.indexOf("CAMPO68") != -1) {
								reporteDetVO.setCampo68(rst
										.getString("CAMPO68"));
							}
							if (strAtriEspecificos.indexOf("CAMPO69") != -1) {
								reporteDetVO.setCampo69(rst
										.getString("CAMPO69"));
							}
							if (strAtriEspecificos.indexOf("CAMPO70") != -1) {
								reporteDetVO.setCampo70(rst
										.getString("CAMPO70"));
							}
						}
						if (sizeListAtriEsp > 70) {
							if (strAtriEspecificos.indexOf("CAMPO71") != -1) {
								reporteDetVO.setCampo71(rst
										.getString("CAMPO71"));
							}
							if (strAtriEspecificos.indexOf("CAMPO72") != -1) {
								reporteDetVO.setCampo72(rst
										.getString("CAMPO72"));
							}
							if (strAtriEspecificos.indexOf("CAMPO73") != -1) {
								reporteDetVO.setCampo73(rst
										.getString("CAMPO73"));
							}
							if (strAtriEspecificos.indexOf("CAMPO74") != -1) {
								reporteDetVO.setCampo74(rst
										.getString("CAMPO74"));
							}
							if (strAtriEspecificos.indexOf("CAMPO75") != -1) {
								reporteDetVO.setCampo75(rst
										.getString("CAMPO75"));
							}
							if (strAtriEspecificos.indexOf("CAMPO76") != -1) {
								reporteDetVO.setCampo76(rst
										.getString("CAMPO76"));
							}
							if (strAtriEspecificos.indexOf("CAMPO77") != -1) {
								reporteDetVO.setCampo77(rst
										.getString("CAMPO77"));
							}
							if (strAtriEspecificos.indexOf("CAMPO78") != -1) {
								reporteDetVO.setCampo78(rst
										.getString("CAMPO78"));
							}
							if (strAtriEspecificos.indexOf("CAMPO79") != -1) {
								reporteDetVO.setCampo79(rst
										.getString("CAMPO79"));
							}
							if (strAtriEspecificos.indexOf("CAMPO80") != -1) {
								reporteDetVO.setCampo80(rst
										.getString("CAMPO80"));
							}
						}
						if (sizeListAtriEsp > 80) {
							if (strAtriEspecificos.indexOf("CAMPO81") != -1) {
								reporteDetVO.setCampo81(rst
										.getString("CAMPO81"));
							}
							if (strAtriEspecificos.indexOf("CAMPO82") != -1) {
								reporteDetVO.setCampo82(rst
										.getString("CAMPO82"));
							}
							if (strAtriEspecificos.indexOf("CAMPO83") != -1) {
								reporteDetVO.setCampo83(rst
										.getString("CAMPO83"));
							}
							if (strAtriEspecificos.indexOf("CAMPO84") != -1) {
								reporteDetVO.setCampo84(rst
										.getString("CAMPO84"));
							}
							if (strAtriEspecificos.indexOf("CAMPO85") != -1) {
								reporteDetVO.setCampo85(rst
										.getString("CAMPO85"));
							}
							if (strAtriEspecificos.indexOf("CAMPO86") != -1) {
								reporteDetVO.setCampo86(rst
										.getString("CAMPO86"));
							}
							if (strAtriEspecificos.indexOf("CAMPO87") != -1) {
								reporteDetVO.setCampo87(rst
										.getString("CAMPO87"));
							}
							if (strAtriEspecificos.indexOf("CAMPO88") != -1) {
								reporteDetVO.setCampo88(rst
										.getString("CAMPO88"));
							}
							if (strAtriEspecificos.indexOf("CAMPO89") != -1) {
								reporteDetVO.setCampo89(rst
										.getString("CAMPO89"));
							}
							if (strAtriEspecificos.indexOf("CAMPO90") != -1) {
								reporteDetVO.setCampo90(rst
										.getString("CAMPO90"));
							}
						}
						if (sizeListAtriEsp > 90) {
							if (strAtriEspecificos.indexOf("CAMPO91") != -1) {
								reporteDetVO.setCampo91(rst
										.getString("CAMPO91"));
							}
							if (strAtriEspecificos.indexOf("CAMPO92") != -1) {
								reporteDetVO.setCampo92(rst
										.getString("CAMPO92"));
							}
							if (strAtriEspecificos.indexOf("CAMPO93") != -1) {
								reporteDetVO.setCampo93(rst
										.getString("CAMPO93"));
							}
							if (strAtriEspecificos.indexOf("CAMPO94") != -1) {
								reporteDetVO.setCampo94(rst
										.getString("CAMPO94"));
							}
							if (strAtriEspecificos.indexOf("CAMPO95") != -1) {
								reporteDetVO.setCampo95(rst
										.getString("CAMPO95"));
							}
							if (strAtriEspecificos.indexOf("CAMPO96") != -1) {
								reporteDetVO.setCampo96(rst
										.getString("CAMPO96"));
							}
							if (strAtriEspecificos.indexOf("CAMPO97") != -1) {
								reporteDetVO.setCampo97(rst
										.getString("CAMPO97"));
							}
							if (strAtriEspecificos.indexOf("CAMPO98") != -1) {
								reporteDetVO.setCampo98(rst
										.getString("CAMPO98"));
							}
							if (strAtriEspecificos.indexOf("CAMPO99") != -1) {
								reporteDetVO.setCampo99(rst
										.getString("CAMPO99"));
							}
							if (strAtriEspecificos.indexOf("CAMPO100") != -1) {
								reporteDetVO.setCampo100(rst
										.getString("CAMPO100"));
							}
						}
					}
				}
				reporteDetVO
						.setFechaBeneficio(rst.getString("FECHA_BENEFICIO"));
				reporteDetVO.setTipoBeneficio(rst.getString("TIPO_BENEFICIO"));
				reporteDetVO.setValor(rst.getInt("VALOR"));
				reporteDetVO.setEdad(rst.getString("EDAD"));

				beneficiarios.add(reporteDetVO);
			}
		} catch (SQLException e) {
			throw new DAOException(e);
		} finally {
			close(rst, cs);
		}
		return beneficiarios;
	}

	public Integer findCantidadBeneficiarios(List<CondicionConsultaVO> filtros,
			RepDetBOTVO criteria) throws DAOException {
		// TODO Auto-generated method stub
		return null;
	}

	public Long findValorTotal(List<CondicionConsultaVO> filtros,
			RepDetBOTVO criteria) throws DAOException {
		// TODO Auto-generated method stub
		return null;
	}

	public RepDetBOTVO findFilters(RepDetBOTVO criteria) throws DAOException {
		// TODO Auto-generated method stub
		return null;
	}

	private String checkFiltros(Collection<CondicionConsultaVO> filtros) {
		List<CondicionConsultaVO> lFiltros = (List<CondicionConsultaVO>) filtros;
		CondicionConsultaVO filtro = null;
		StringBuffer retorno = new StringBuffer();
		if ((Object) filtros != null) {
			for (int i = 0; i < lFiltros.size(); i++) {
				filtro = (CondicionConsultaVO) lFiltros.get(i);
				String operador = filtro.getCodFiltro();
				String tipoDato = filtro.getTipoCampo();

				if (filtro.getOrigen().equals("G")) {
					retorno.append(" AND ");
					if (tipoDato.equals("N")) {
						if (operador.equals("=")) {
							retorno.append(" ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor());
						} else if (operador.equals("<>")) {
							retorno.append(" ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor());
						} else if (operador.equals("<=")) {
							retorno.append("ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor());
						} else if (operador.equals(">=")) {
							retorno.append("ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor());
						} else if (operador.equals("<")) {
							retorno.append("ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor());
						} else if (operador.equals(">")) {
							retorno.append("ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor());
						} else {
							retorno.append("ben." + filtro.getCodcampo() + " "
									+ operador + " " + filtro.getValor()
									+ " AND " + filtro.getValor2());
						}

					} else if (tipoDato.equals("F")) {

						if (operador.equalsIgnoreCase("between")
								|| operador.equals("=")) {
							retorno.append("ben." + filtro.getCodcampo() + " "
									+ operador + " to_date(''"
									+ filtro.getValor()
									+ "'', ''DD/MM/RRRR'') and to_date(''"
									+ filtro.getValor2()
									+ "'', ''DD/MM/RRRR'')");

						} else {
							retorno.append("ben." + filtro.getCodcampo() + " "
									+ operador + " to_date(''"
									+ filtro.getValor() + "'', ''DD/MM/RRRR'')");
						}

					} else if (tipoDato.equals("A") || tipoDato.equals("L")) {
						if (operador.equals("=")) {
							retorno.append(" UPPER(ben." + filtro.getCodcampo()
									+ " ) " + operador + " "
									+ filtro.getValor().toUpperCase() + "");
						} else if (operador.equals("<>")) {
							retorno.append(" UPPER(ben." + filtro.getCodcampo()
									+ " ) " + operador + " ''"
									+ filtro.getValor().toUpperCase() + "''");
						} else if (operador.equals("like")) {
							retorno.append(" UPPER(ben." + filtro.getCodcampo()
									+ " ) " + operador + " ''%"
									+ filtro.getValor().toUpperCase() + "%''");
						}
					} else {
						if (operador.equals("=")) {
							retorno.append(" ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "''");
						} else if (operador.equals("<>")) {
							retorno.append(" ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "''");
						} else if (operador.equals("<=")) {
							retorno.append("ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "''");
						} else if (operador.equals(">=")) {
							retorno.append("ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "''");
						} else if (operador.equals("<")) {
							retorno.append("ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "''");
						} else if (operador.equals(">")) {
							retorno.append("ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "''");
						} else {
							retorno.append("ben." + filtro.getCodcampo() + " "
									+ operador + " ''" + filtro.getValor()
									+ "'' and ''" + filtro.getValor2() + "''");
						}
					}
				}
			}
		}
		return retorno.toString();
	}

	private String checkFiltrosEspecificos(
			Collection<CondicionConsultaVO> filtros) throws SQLException {
		List<CondicionConsultaVO> lFiltros = (List<CondicionConsultaVO>) filtros;
		CondicionConsultaVO filtro = null;
		StringBuffer retorno = new StringBuffer();
		if ((Object) filtros != null) {
			for (int i = 0; i < lFiltros.size(); i++) {
				filtro = (CondicionConsultaVO) lFiltros.get(i);
				if (filtro.getOrigen().equals("E")) {
					if (filtro.getCodFiltro().equals("=")) {
						retorno.append(" AND NVL(Fcs_Ben_Valor_Atributo("
								+ filtro.getCodcampo()
								+ ", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') = TO_CHAR(''"
								+ filtro.getValor().toUpperCase() + "'') ");
					} else if (filtro.getCodFiltro().equals("<>")) {
						retorno.append(" AND NVL(Fcs_Ben_Valor_Atributo("
								+ filtro.getCodcampo()
								+ ", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') <> TO_CHAR(''"
								+ filtro.getValor().toUpperCase() + "'') ");
					} else if (filtro.getCodFiltro().equals("<=")) {
						retorno.append(" AND NVL(Fcs_Ben_Valor_Atributo("
								+ filtro.getCodcampo()
								+ ", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') <= TO_CHAR(''"
								+ filtro.getValor() + "'') ");
					} else if (filtro.getCodFiltro().equals(">=")) {
						retorno.append(" AND NVL(Fcs_Ben_Valor_Atributo("
								+ filtro.getCodcampo()
								+ ", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') >= TO_CHAR(''"
								+ filtro.getValor() + "'') ");
					} else if (filtro.getCodFiltro().equals("<")) {
						retorno.append(" AND NVL(Fcs_Ben_Valor_Atributo("
								+ filtro.getCodcampo()
								+ ", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') < TO_CHAR(''"
								+ filtro.getValor() + "'') ");
					} else if (filtro.getCodFiltro().equals(">")) {
						retorno.append(" AND NVL(Fcs_Ben_Valor_Atributo("
								+ filtro.getCodcampo()
								+ ", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') > TO_CHAR(''"
								+ filtro.getValor() + "'') ");
					} else if (filtro.getCodFiltro().equals("between")) {
						retorno.append(" AND NVL(Fcs_Ben_Valor_Atributo("
								+ filtro.getCodcampo()
								+ ", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') between TO_CHAR(''"
								+ filtro.getValor() + "'') AND TO_CHAR(''"
								+ filtro.getValor2() + "'')");
					} else if (filtro.getCodFiltro().equals("like")) {
						retorno.append(" AND NVL(Fcs_Ben_Valor_Atributo("
								+ filtro.getCodcampo()
								+ ", bot.codigo, ben.codigo, bot.FECHA_BENEFICIO),'' '') LIKE TO_CHAR(UPPER(''%"
								+ filtro.getValor() + "%''))");
					}
				}
			}
		}
		return retorno.toString();
	}

}
